Connectionless or packet-switched networks, such as the Internet, transmit data between network devices in packets. The packets may be fixed length or variable length units of data of a certain number of bytes as may be required by the underlying communications media or protocol via which the packets are transmitted. The network addresses of the source network device (“source”) and of the destination network device (“destination”) are added to each packet (excluding multicast or broadcast packets). A network device is generally an electronic device such as a network switch, server, workstation, desktop computer, personal digital assistant, mobile or laptop computer, cellular or mobile telephone, printer, database, etc., that is accessible by or over a network. Packet addressing in a connectionless network allows multiple connections to concurrently communicate between various source and destination devices, a significant advantage over circuit-switched or connection-oriented networks.
Often when an application requires large quantities of related data to be sent between communicating devices the data is sent as a series of packets known as a data stream. The number of packets in a stream varies widely from a few packets to thousands or more depending on the type and length of content of the data.
Unfortunately, as streaming activity across the connectionless network increases, the available network capacity between a specific source and destination may decrease. The result of this reduced capacity is that the source and destination must often wait before they can send additional packets. Furthermore, within the connectionless network environment, packets can be delayed, lost, damaged, delivered out of order, duplicated, and destroyed thereby making the task of successfully streaming data across the network even more difficult. Delays introduced during periods of network congestion or device failures can create significant problems for applications that require the data streams to be transmitted at a designated rate. Applications that provide streaming media services are also highly dependent on a reliable data delivery rate.
To avoid interruptions during playback of streaming media, an application may attempt to determine the available network capacity prior to establishing an initial data connection with the source. The application may even provide a buffer at the destination to help absorb network delays inherent in the Internet. Unfortunately, even a buffered application may not be able to adjust to delays or congestion introduced onto the network after the initial data connection has been made. Furthermore, most applications are limited to adjustments that can be made without negatively affecting playback at the destination because of the difficulty in making midstream adjustments. What is needed is a data communication system that maintains the overall rate of data transmission to a destination network device despite fluctuating network capacity.